package student.aistar.mapper;

import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import student.aistar.model.dto.VideoQueryDTO;
import student.aistar.model.entity.TVideo;

import java.util.List;
import java.util.Map;

public interface TVideoMapper {
    /**
     * 散列的数据, 通过title模糊查询, 根据价格范围查找
     * 为了给sql标签中的#{占位符名称} - 两者名称高度保持一致即可
     * @param price
     * @param title
     * @return
     */
    List<TVideo> findByPriceAndTitle(@Param("price") Double price, @Param("title") String title);


    /**
     * 第三方实体类封装条件查询
     * @param videoQueryDTO
     * @return
     */
    List<TVideo> findByLikeAndTitles(VideoQueryDTO videoQueryDTO);


    /**
     * 条件是用Map来封装的
     * @param maps
     * @return
     */
    List<TVideo> findByMap(Map<String, Object> maps);


    /**
     * 统计每个用户和他发布的视频数量
     * 用户名称 - 视频数量
     * map的key是选用哪一列 - 查询列的名称
     * @return
     */
    @MapKey("key")
    Map<String, Object> countUserVideos();

    /**
     * 动态sql - if标签 + where 标签
     * 任意进行组合
     * price和title两个条件都允许不传入
     * 如果全部不传入, 查询所有
     * @param price
     * @param title
     * @return
     */
    List<TVideo> findIf(@Param("price") Double price, @Param("title") String title);


    /**
     * 动态sql - set标签
     * @param tVideo
     * @return
     */
    int update(TVideo tVideo);


    //动态sql - foreach标签
    //select * from t_video where id in(1,2,3);

    /**
     * <foreach open="(" close = ")" separator="," collection="list" item="item">
     *     #{item}
     * </foreach>
     * @param ids
     * @return
     */
    List<TVideo> findIds(@Param("ids") List<Integer> ids);

    /**
     * 报错多条视频信息
     * insert into t_video values(...),(...),(...)
     * @param videos
     * @return
     */
    int saveList(List<TVideo> videos);
}
